package java学习.第17章_反射机制;


import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 类加载器
 * 引导类加载器:用C++编写的，是JVM自带的类加载器，
 *          负责Java平台核心库，用来装载核心类
 *          库。该加载器无法直接获取
 * 扩展类加载器:负责ie/ib/ex目录下的jar包或
 *          -D java.ext.dirs指定目录下的ar包装入工作库
 * 系统类加载器:负责java -classpath或
 *          -D java.class.path所指的目录下的类与
 *          jar包装入工作，是最常用的加载器
 */
public class F_Classloader的使用 {

    public static void main(String[] args) {
        配置文件();
    }
    private static void 配置文件()  {
        Properties pros =  new Properties();
        //此时的文件默认在当前的module下。
        //读取配置文件的方式一：
//        FileInputStream fis = new FileInputStream("jyjk.properties");
//        FileInputStream fis = new FileInputStream("src\\jdbc1.properties");
//        try {pros.load(fis);} catch (IOException e) {e.printStackTrace();}

        //读取配置文件的方式二：使用ClassLoader
        //配置文件默认识别为：当前module      的src下    如果存在 配置类文件夹，就会在配置类文件夹下
        ClassLoader classLoader = F_Classloader的使用.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("jdbc.properties");
        try {
            pros.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }


        String user = pros.getProperty("name");
        String password = pros.getProperty("age");
        System.out.println("name = " + user + ",password = " + password);
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void 类加载器的顺序() {
        ClassLoader classLoader = F_Classloader的使用.class.getClassLoader();
        System.out.println(classLoader);
        //sun.misc.Launcher$AppClassLoader@18b4aac2//JKD8 系统类加载器
        //jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b//JKD9 系统类加载器

        System.out.println(classLoader.getParent());
        //sun.misc.Launcher$ExtClassLoader@61bbe9ba//JKD8 扩展类加载器
        //jdk.internal.loader.ClassLoaders$PlatformClassLoader@28f67ac7//JKD9 扩展类加载器

        System.out.println(classLoader.getParent().getParent());
        //null//引导类加载器获取不到  主要负责加载java的核心类库
    }

}
